package Controlador;

import interfaces.IControlador;
import interfaces.IPacman;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import xml.xmlUtilidades;


public class ControladorXMLDelMovimientoDePacman implements IControlador {

	private IPacman pacman;
	private String rutaArchivoDireccion;

	/**
	 * 
	 * @param pacman modelo a ser invocado por el controlador
	 * @param rutaArchivoDireccion 
	 */
	public ControladorXMLDelMovimientoDePacman(IPacman pacman,String rutaArchivoDireccion){
		this.pacman = pacman;
		this.rutaArchivoDireccion = rutaArchivoDireccion;
	}
	
	@Override
	public void actualizar(int iteracion) {
		leerDireccionMovimiento(rutaArchivoDireccion,iteracion);
	}
	
	private void leerDireccionMovimiento(String rutaArchivoDireccion, int tickActual) {
		rutaArchivoDireccion = xmlUtilidades.completarRuta(rutaArchivoDireccion);
		rutaArchivoDireccion = xmlUtilidades.completarNombreDeArchivo(rutaArchivoDireccion, tickActual);
		try {

			File movimientoXML = new File(rutaArchivoDireccion);
			DocumentBuilderFactory fabricaDeDocumento = DocumentBuilderFactory.newInstance();
			DocumentBuilder dBuilder = fabricaDeDocumento.newDocumentBuilder();
			Document contenidoXML = dBuilder.parse(movimientoXML);
			contenidoXML.getDocumentElement().normalize();

			NodeList nList = contenidoXML.getElementsByTagName("pacman");

			//Se espera un solo nodo con la "direccion".
			Node listadoDeMovimientosPacman = nList.item(0);
			if (listadoDeMovimientosPacman.getNodeType() == Node.ELEMENT_NODE) {
				Element eMovimientoPacman = (Element) listadoDeMovimientosPacman;
				String direccionObtenida = eMovimientoPacman.getAttribute("direccion");
				
				if (direccionObtenida.toString().equals("arriba")) pacman.movimientoArriba();
				if (direccionObtenida.toString().equals("abajo")) pacman.movimientoAbajo(); 
				if (direccionObtenida.toString().equals("izquierda")) pacman.movimientoAIzquierda();
				if (direccionObtenida.toString().equals("derecha")) pacman.movimientoADerecha();
				
			}
			
		} 
		catch (Exception e) {
			System.out.println("Error al leer " + rutaArchivoDireccion);
			e.printStackTrace();
		}
		
	}



	
	
}
